home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume25 / ted / part07 < prev    next >
Encoding:
Text File  |  1991-11-06  |  37.1 KB  |  1,149 lines

  1. Newsgroups: comp.sources.misc
  2. From: dan%step.uucp@uunet.uu.net (Daniel Weaver)
  3. Subject:  v25i032:  ted - Terminfo/termcap test program, Part07/07
  4. Message-ID: <1991Nov6.043050.6192@sparky.imd.sterling.com>
  5. X-Md4-Signature: a08ed78b26258c5d417418d71a69a582
  6. Date: Wed, 6 Nov 1991 04:30:50 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: dan%step.uucp@uunet.uu.net (Daniel Weaver)
  10. Posting-number: Volume 25, Issue 32
  11. Archive-name: ted/part07
  12. Environment: UNIX
  13.  
  14. #! /bin/sh
  15. # This is a shell archive.  Remove anything before this line, then feed it
  16. # into a shell via "sh file" or similar.  To overwrite existing files,
  17. # type "sh file -c".
  18. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  19. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  20. # If this archive is complete, you will see the following message at the end:
  21. #        "End of archive 7 (of 7)."
  22. # Contents:  bsd.h capcomp.c color.c makefile
  23. # Wrapped by dan@step on Fri Nov  1 11:28:29 1991
  24. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  25. if test -f 'bsd.h' -a "${1}" != "-c" ; then 
  26.   echo shar: Will not clobber existing file \"'bsd.h'\"
  27. else
  28. echo shar: Extracting \"'bsd.h'\" \(7528 characters\)
  29. sed "s/^X//" >'bsd.h' <<'END_OF_FILE'
  30. X/*
  31. X** This software is Copyright (c) 1991 by Daniel Weaver.
  32. X**
  33. X** Permission is hereby granted to copy, distribute or otherwise
  34. X** use any part of this package as long as you do not try to make
  35. X** money from it or pretend that you wrote it.  This copyright
  36. X** notice must be maintained in any copy made.
  37. X**
  38. X** Use of this software constitutes acceptance for use in an AS IS
  39. X** condition. There are NO warranties with regard to this software.
  40. X** In no event shall the author be liable for any damages whatsoever
  41. X** arising out of or in connection with the use or performance of this
  42. X** software.  Any use of this software is at the user's own risk.
  43. X**
  44. X**  If you make modifications to this software that you feel
  45. X**  increases it usefulness for the rest of the community, please
  46. X**  email the changes, enhancements, bug fixes as well as any and
  47. X**  all ideas to me. This software is going to be maintained and
  48. X**  enhanced as deemed necessary by the community.
  49. X*/
  50. X/* termcap to terminfo conversion */
  51. X
  52. X#ifdef MAIN
  53. X#define EXTERN
  54. X#else
  55. X#define EXTERN extern
  56. X#endif
  57. X
  58. Xtypedef char *CHARSTAR;
  59. X
  60. XEXTERN char
  61. X auto_left_margin, auto_right_margin, no_esc_ctlc,
  62. X ceol_standout_glitch, eat_newline_glitch, erase_overstrike,
  63. X generic_type, hard_copy, has_meta_key, has_status_line,
  64. X insert_null_glitch, memory_above, memory_below, move_insert_mode,
  65. X move_standout_mode, over_strike, status_line_esc_ok,
  66. X dest_tabs_magic_smso, tilde_glitch, transparent_underline, xon_xoff,
  67. X needs_xon_xoff, prtr_silent, hard_cursor, non_rev_rmcup, no_pad_char,
  68. X non_dest_scroll_region, can_change, back_color_erase,
  69. X hue_lightness_saturation, col_addr_glitch, cr_cancels_micro_mode,
  70. X has_print_wheel, row_addr_glitch, semi_auto_right_margin,
  71. X cpi_changes_res, lpi_changes_res, physical_tabs;
  72. X
  73. XEXTERN int
  74. X columns, init_tabs, lines, lines_of_memory, magic_cookie_glitch,
  75. X padding_baud_rate, virtual_terminal, width_status_line, num_labels,
  76. X label_height, label_width, max_attributes, maximum_windows, max_colors,
  77. X max_pairs, no_color_video, buffer_capacity, dot_vert_spacing,
  78. X dot_horz_spacing, max_micro_address, max_micro_jump, micro_char_size,
  79. X micro_line_size, number_of_pins, output_res_char, output_res_line,
  80. X output_res_horz_inch, output_res_vert_inch, print_rate, wide_char_size;
  81. X
  82. XEXTERN CHARSTAR
  83. X back_tab, bell, carriage_return, change_scroll_region, clear_all_tabs,
  84. X clear_screen, clr_eol, clr_eos, column_address, command_character,
  85. X cursor_address, cursor_down, cursor_home, cursor_invisible,
  86. X cursor_left, cursor_mem_address, cursor_normal, cursor_right,
  87. X cursor_to_ll, cursor_up, cursor_visible, delete_character, delete_line,
  88. X dis_status_line, down_half_line, enter_alt_charset_mode,
  89. X enter_blink_mode, enter_bold_mode, enter_ca_mode, enter_delete_mode,
  90. X enter_dim_mode, enter_insert_mode, enter_secure_mode,
  91. X enter_protected_mode, enter_reverse_mode, enter_standout_mode,
  92. X enter_underline_mode, erase_chars, exit_alt_charset_mode,
  93. X exit_attribute_mode, exit_ca_mode, exit_delete_mode, exit_insert_mode,
  94. X exit_standout_mode, exit_underline_mode, flash_screen, form_feed,
  95. X from_status_line, init_1string, init_2string, init_3string, init_file,
  96. X insert_character, insert_line, insert_padding, key_backspace,
  97. X key_catab, key_clear, key_ctab, key_dc, key_dl, key_down, key_eic,
  98. X key_eol, key_eos, key_f0, key_f1, key_f10, key_f2, key_f3, key_f4,
  99. X key_f5, key_f6, key_f7, key_f8, key_f9, key_home, key_ic, key_il,
  100. X key_left, key_ll, key_npage, key_ppage, key_right, key_sf, key_sr,
  101. X key_stab, key_up, keypad_local, keypad_xmit, lab_f0, lab_f1, lab_f10,
  102. X lab_f2, lab_f3, lab_f4, lab_f5, lab_f6, lab_f7, lab_f8, lab_f9,
  103. X meta_off, meta_on, newline, pad_char, parm_dch, parm_delete_line,
  104. X parm_down_cursor, parm_ich, parm_index, parm_insert_line,
  105. X parm_left_cursor, parm_right_cursor, parm_rindex, parm_up_cursor,
  106. X pkey_key, pkey_local, pkey_xmit, print_screen, prtr_off, prtr_on,
  107. X repeat_char, reset_1string, reset_2string, reset_3string, reset_file,
  108. X restore_cursor, row_address, save_cursor, scroll_forward,
  109. X scroll_reverse, set_attributes, set_tab, set_window, tab,
  110. X to_status_line, underline_char, up_half_line, init_prog, key_a1,
  111. X key_a3, key_b2, key_c1, key_c3, prtr_non, char_padding, acs_chars,
  112. X plab_norm, key_btab, enter_xon_mode, exit_xon_mode, enter_am_mode,
  113. X exit_am_mode, xon_character, xoff_character, ena_acs, label_on,
  114. X label_off, key_beg, key_cancel, key_close, key_command, key_copy,
  115. X key_create, key_end, key_enter, key_exit, key_find, key_help, key_mark,
  116. X key_message, key_move, key_next, key_open, key_options, key_previous,
  117. X key_print, key_redo, key_reference, key_refresh, key_replace,
  118. X key_restart, key_resume, key_save, key_suspend, key_undo, key_sbeg,
  119. X key_scancel, key_scommand, key_scopy, key_screate, key_sdc, key_sdl,
  120. X key_select, key_send, key_seol, key_sexit, key_sfind, key_shelp,
  121. X key_shome, key_sic, key_sleft, key_smessage, key_smove, key_snext,
  122. X key_soptions, key_sprevious, key_sprint, key_sredo, key_sreplace,
  123. X key_sright, key_srsume, key_ssave, key_ssuspend, key_sundo,
  124. X req_for_input, key_f11, key_f12, key_f13, key_f14, key_f15, key_f16,
  125. X key_f17, key_f18, key_f19, key_f20, key_f21, key_f22, key_f23, key_f24,
  126. X key_f25, key_f26, key_f27, key_f28, key_f29, key_f30, key_f31, key_f32,
  127. X key_f33, key_f34, key_f35, key_f36, key_f37, key_f38, key_f39, key_f40,
  128. X key_f41, key_f42, key_f43, key_f44, key_f45, key_f46, key_f47, key_f48,
  129. X key_f49, key_f50, key_f51, key_f52, key_f53, key_f54, key_f55, key_f56,
  130. X key_f57, key_f58, key_f59, key_f60, key_f61, key_f62, key_f63, clr_bol,
  131. X clear_margins, set_left_margin, set_right_margin, label_format,
  132. X set_clock, display_clock, remove_clock, create_window, goto_window,
  133. X hangup, dial_phone, quick_dial, tone, pulse, flash_hook, fixed_pause,
  134. X wait_tone, user0, user1, user2, user3, user4, user5, user6, user7,
  135. X user8, user9, orig_pair, orig_colors, initialize_color,
  136. X initialize_pair, set_color_pair, set_foreground, set_background,
  137. X change_char_pitch, change_line_pitch, change_res_horz, change_res_vert,
  138. X define_char, enter_doublewide_mode, enter_draft_quality,
  139. X enter_italics_mode, enter_leftward_mode, enter_micro_mode,
  140. X enter_near_letter_quality, enter_normal_quality, enter_shadow_mode,
  141. X enter_subscript_mode, enter_superscript_mode, enter_upward_mode,
  142. X exit_doublewide_mode, exit_italics_mode, exit_leftward_mode,
  143. X exit_micro_mode, exit_shadow_mode, exit_subscript_mode,
  144. X exit_superscript_mode, exit_upward_mode, micro_column_address,
  145. X micro_down, micro_left, micro_right, micro_row_address, micro_up,
  146. X order_of_pins, parm_down_micro, parm_left_micro, parm_right_micro,
  147. X parm_up_micro, select_char_set, set_bottom_margin,
  148. X set_bottom_margin_parm, set_left_margin_parm, set_right_margin_parm,
  149. X set_top_margin, set_top_margin_parm, start_bit_image,
  150. X start_char_set_def, stop_bit_image, stop_char_set_def,
  151. X subscript_characters, superscript_characters, these_cause_cr,
  152. X zero_motion, char_set_names, reset_string;
  153. X
  154. X#ifdef TC
  155. XEXTERN CHARSTAR cursor_on;
  156. XEXTERN CHARSTAR color_terminal;
  157. X#endif
  158. X
  159. X#ifdef XENIX
  160. XEXTERN CHARSTAR key_char_left;
  161. XEXTERN CHARSTAR key_change_window;
  162. XEXTERN CHARSTAR key_send;
  163. XEXTERN CHARSTAR key_Home;
  164. XEXTERN CHARSTAR key_line_delete;
  165. XEXTERN CHARSTAR key_linefeed;
  166. XEXTERN CHARSTAR key_next_unlocked_cell;
  167. XEXTERN CHARSTAR key_start_print;
  168. XEXTERN CHARSTAR key_page_down;
  169. XEXTERN CHARSTAR key_page_up;
  170. XEXTERN CHARSTAR key_stop_print;
  171. XEXTERN CHARSTAR key_recalc;
  172. XEXTERN CHARSTAR key_toggle_ref;
  173. XEXTERN CHARSTAR key_return;
  174. XEXTERN CHARSTAR key_up_arrow;
  175. XEXTERN CHARSTAR key_word_left;
  176. XEXTERN CHARSTAR key_word_right;
  177. X#endif
  178. X
  179. X#define MAX_STRINGS 355
  180. END_OF_FILE
  181. if test 7528 -ne `wc -c <'bsd.h'`; then
  182.     echo shar: \"'bsd.h'\" unpacked with wrong size!
  183. fi
  184. # end of 'bsd.h'
  185. fi
  186. if test -f 'capcomp.c' -a "${1}" != "-c" ; then 
  187.   echo shar: Will not clobber existing file \"'capcomp.c'\"
  188. else
  189. echo shar: Extracting \"'capcomp.c'\" \(4641 characters\)
  190. sed "s/^X//" >'capcomp.c' <<'END_OF_FILE'
  191. X/*
  192. X** This software is Copyright (c) 1991 by Daniel Weaver.
  193. X**
  194. X** Permission is hereby granted to copy, distribute or otherwise
  195. X** use any part of this package as long as you do not try to make
  196. X** money from it or pretend that you wrote it.  This copyright
  197. X** notice must be maintained in any copy made.
  198. X**
  199. X** Use of this software constitutes acceptance for use in an AS IS
  200. X** condition. There are NO warranties with regard to this software.
  201. X** In no event shall the author be liable for any damages whatsoever
  202. X** arising out of or in connection with the use or performance of this
  203. X** software.  Any use of this software is at the user's own risk.
  204. X**
  205. X**  If you make modifications to this software that you feel
  206. X**  increases it usefulness for the rest of the community, please
  207. X**  email the changes, enhancements, bug fixes as well as any and
  208. X**  all ideas to me. This software is going to be maintained and
  209. X**  enhanced as deemed necessary by the community.
  210. X*/
  211. X/* compare 2 termcaps */
  212. X
  213. X/*
  214. X    Usage:
  215. X    capcomp [ -A termcap-file ] [ -B termcap-file ] [ -p ]
  216. X        [ termname ] [ termname ]
  217. X
  218. X*/
  219. X
  220. X#include <stdio.h>
  221. X
  222. X#ifdef TC
  223. X#define tgetent tcgetent
  224. X#endif
  225. X
  226. Xextern char *getenv();
  227. X
  228. Xchar c1[4096], c2[4096];  /* termcap buffers */
  229. Xchar *s1[128][128], *s2[128][128];  /* sorted capabilities */
  230. Xchar buf[8192];
  231. Xint bp, dup;
  232. X
  233. Xint ignore_pad;
  234. Xchar Afile[512], Bfile[512];
  235. Xchar Aterm[512], Bterm[512];
  236. X
  237. Xextern char **environ;
  238. X
  239. Xchar termfile[512];
  240. Xchar *new_env[2] = {termfile, 0};
  241. X
  242. Xsort(a, b, name)
  243. Xchar *a, *name;
  244. Xchar **b;
  245. X{
  246. X    int i;
  247. X    char *s, *t;
  248. X
  249. X    for (s = a; *s != ':'; s++)  /* scan past name */
  250. X    if (!*s) return;
  251. X    if (dup) printf("\n");
  252. X    dup = 0;
  253. X    for (s++; *s; s++) {
  254. X       while (*s == ' ' || *s == '\t') s++;
  255. X    if (*s == ':') continue;  /* ignore null entries */
  256. X    i = *s * 128;
  257. X    i += *++s;
  258. X    if (!*s) return;
  259. X    if (b[i]) {
  260. X        if (dup++ == 0)
  261. X        printf("%s multiple definitions: ", name);
  262. X        else printf(", ");
  263. X        printf("%c%c", i / 128, i & 127);
  264. X        /* trash the second entry */
  265. X        for ( ; *s && *s != ':'; s++);
  266. X        if (!*s) return;
  267. X        continue;
  268. X    }
  269. X    if (!*++s) return;
  270. X    if (*s == ':') { /* boolean */
  271. X        b[i] = "on";
  272. X        continue;
  273. X    }
  274. X    if (*s++ == '=' && ignore_pad) /* trash the pad count */
  275. X        {
  276. X        for ( ; *s >= '0' && *s <= '9'; s++);
  277. X        if (*s == '*') s++;  /* repeat factor */
  278. X        }
  279. X    t = b[i] = &buf[bp];
  280. X        for ( ; *s && *s != ':'; s++)
  281. X        buf[bp++] = *s;
  282. X    buf[bp++] = '\0';
  283. X    if (!*s) return;
  284. X    i = 0;
  285. X        for ( ; *t; t++) {
  286. X        if (i == '\\')
  287. X        switch (*t) {
  288. X        case 'b':  *t = '\b' + '@';  t[-1] = '^';  break;
  289. X        case 'f':  *t = '\f' + '@';  t[-1] = '^';  break;
  290. X        case 'n':  *t = '\n' + '@';  t[-1] = '^';  break;
  291. X        case 'r':  *t = '\r' + '@';  t[-1] = '^';  break;
  292. X        case 't':  *t = '\t' + '@';  t[-1] = '^';  break;
  293. X        default:
  294. X            i = 0;  continue;
  295. X        }
  296. X        i = *t;
  297. X        }
  298. X    }
  299. X}
  300. X
  301. X
  302. Xsend(s)
  303. Xchar *s;
  304. X{
  305. X    int ch;
  306. X
  307. X    while (ch = (*s & 0xff)) {
  308. X        if (ch == 127) printf("^?");
  309. X    else
  310. X    if (ch > 128) printf("\\%o", *s);
  311. X    else
  312. X    if (ch >= ' ') printf("%c", *s);
  313. X    else printf("^%c", *s + '@');
  314. X    s++;
  315. X    }
  316. X}
  317. X
  318. X
  319. Xmain(argc, argv)
  320. Xint argc;
  321. Xchar **argv;
  322. X{
  323. X    int i, j;
  324. X    char *s, *t;
  325. X
  326. X    if (argc < 2) {
  327. X    printf("Usage: capcomp [-A termcap-file] [-B termcap-file] [-p] [termname] [termname]\n");
  328. X    exit(1);
  329. X    }
  330. X    /* set up defaults */
  331. X    if (s = getenv("TERM")) {
  332. X    strcpy(Aterm, s);
  333. X    strcpy(Bterm, s);
  334. X    }
  335. X    if ((s = getenv("TERMCAP")) && *s == '/') {
  336. X    strcpy(Afile, s);
  337. X    strcpy(Bfile, s);
  338. X    }
  339. X    else {
  340. X    strcpy(Afile, "/etc/termcap");
  341. X    strcpy(Bfile, Afile);
  342. X    }
  343. X    ignore_pad = 0;
  344. X    /* scan the input arguments */
  345. X    for (i = j = 1; i < argc; i++) {
  346. X        if (!strcmp(argv[i], "-A") && ++i < argc) {
  347. X        strcpy(Afile, argv[i]);
  348. X        }
  349. X        else
  350. X        if (!strcmp(argv[i], "-B") && ++i < argc) {
  351. X        strcpy(Bfile, argv[i]);
  352. X        }
  353. X        else
  354. X        if (!strcmp(argv[i], "-p")) {
  355. X        ignore_pad = 1;
  356. X        }
  357. X        else
  358. X        if (j == 1) {
  359. X        strcpy(Aterm, argv[i]);
  360. X        j++;
  361. X        }
  362. X        else strcpy(Bterm, argv[i]);
  363. X    }
  364. X    printf("%s %s <--> %s %s  with%s pads\n",
  365. X    Afile, Aterm, Bfile, Bterm, ignore_pad ? "out" : "");
  366. X
  367. X    environ = new_env;
  368. X    sprintf(termfile, "TERMCAP=%s", Afile);
  369. X    if (tgetent(c1, Aterm) <= 0) {
  370. X    printf("Unable to find %s\n", Aterm);
  371. X    exit(1);
  372. X    }
  373. X
  374. X    sprintf(termfile, "TERMCAP=%s", Bfile);
  375. X    if (tgetent(c2, Bterm) <= 0) {
  376. X    printf("Unable to find %s\n", Bterm);
  377. X    exit(1);
  378. X    }
  379. X
  380. X    sort(c1, s1, Aterm);
  381. X    sort(c2, s2, Bterm);
  382. X    if (dup) printf("\n");
  383. X    for (i = 0; i < 128; i++)
  384. X        for (j = 0; j < 128; j++) {
  385. X        s = s1[i][j] ? s1[i][j] : "";
  386. X        t = s2[i][j] ? s2[i][j] : "";
  387. X        if (strcmp(s, t)) {
  388. X            printf("%20s  %c%c  %s\n", s, i, j, t);
  389. X        }
  390. X        }
  391. X    exit(0);
  392. X}
  393. END_OF_FILE
  394. if test 4641 -ne `wc -c <'capcomp.c'`; then
  395.     echo shar: \"'capcomp.c'\" unpacked with wrong size!
  396. fi
  397. # end of 'capcomp.c'
  398. fi
  399. if test -f 'color.c' -a "${1}" != "-c" ; then 
  400.   echo shar: Will not clobber existing file \"'color.c'\"
  401. else
  402. echo shar: Extracting \"'color.c'\" \(18610 characters\)
  403. sed "s/^X//" >'color.c' <<'END_OF_FILE'
  404. X/*
  405. X** This software is Copyright (c) 1991 by Daniel Weaver.
  406. X**
  407. X** Permission is hereby granted to copy, distribute or otherwise
  408. X** use any part of this package as long as you do not try to make
  409. X** money from it or pretend that you wrote it.  This copyright
  410. X** notice must be maintained in any copy made.
  411. X**
  412. X** Use of this software constitutes acceptance for use in an AS IS
  413. X** condition. There are NO warranties with regard to this software.
  414. X** In no event shall the author be liable for any damages whatsoever
  415. X** arising out of or in connection with the use or performance of this
  416. X** software.  Any use of this software is at the user's own risk.
  417. X**
  418. X**  If you make modifications to this software that you feel
  419. X**  increases it usefulness for the rest of the community, please
  420. X**  email the changes, enhancements, bug fixes as well as any and
  421. X**  all ideas to me. This software is going to be maintained and
  422. X**  enhanced as deemed necessary by the community.
  423. X*/
  424. X/* color terminal tests */
  425. X
  426. X#include "curses.h"
  427. X#include "ted.h"
  428. X
  429. X#ifdef SVR3_2
  430. X
  431. Xextern struct mode_list alt_modes[];
  432. Xextern int mode_map[];
  433. X
  434. Xstruct color_table {
  435. X   char *name;
  436. X   int r, g, b;
  437. X   int h, l, s;
  438. X} def_colors[8] = {
  439. X   "black  ",    0,    0,    0,   0,   0,   0,
  440. X   "blue   ",    0,    0, 1000, 330,  50, 100,
  441. X   "green  ",    0, 1000,    0, 240,  50, 100,
  442. X   "cyan   ",    0, 1000, 1000, 300,  50, 100,
  443. X   "red    ", 1000,    0,    0, 120,  50, 100,
  444. X   "magenta", 1000,    0, 1000,  60,  50, 100,
  445. X   "yellow ", 1000, 1000,    0, 180,  50, 100,
  446. X   "white  ", 1000, 1000, 1000,   0, 100,   0};
  447. X
  448. X#ifndef COLOR_BLACK
  449. X#define COLOR_BLACK    0
  450. X#define COLOR_BLUE    1
  451. X#define COLOR_GREEN    2
  452. X#define COLOR_CYAN    3
  453. X#define COLOR_RED    4
  454. X#define COLOR_MAGENTA    5
  455. X#define COLOR_YELLOW    6
  456. X#define COLOR_WHITE    7
  457. X#endif
  458. X
  459. X#define MAX_PAIR    256
  460. Xstatic int fg_color[MAX_PAIR] = {COLOR_BLACK, COLOR_BLUE, COLOR_GREEN,
  461. X    COLOR_CYAN, COLOR_RED, COLOR_MAGENTA, COLOR_YELLOW, COLOR_WHITE};
  462. Xstatic int bg_color[MAX_PAIR] = {COLOR_BLACK, COLOR_BLACK, COLOR_BLACK,
  463. X    COLOR_BLACK, COLOR_BLACK, COLOR_BLACK, COLOR_BLACK, COLOR_BLACK};
  464. Xstatic int pairs_used;
  465. Xstatic int a_bright_color, bright_value;
  466. Xstatic int cookie_monster, color_step, colors_per_line;
  467. Xstatic int R, G, B;
  468. X
  469. Xstatic int
  470. Xcolor_trans(c)
  471. Xint c;
  472. X   {  /* translate or load the color */
  473. X      int i;
  474. X
  475. X         for (i = 0; i < pairs_used; i++) {
  476. X            if (fg_color[i] == c) return i;
  477. X         }
  478. X      if (!can_change)
  479. X         return 0;
  480. X      if (pairs_used > max_colors || pairs_used >= MAX_PAIR)
  481. X         {
  482. X            pairs_used = 0;
  483. X            ptextln("Ran out of colors");
  484. X         }
  485. X      fg_color[pairs_used] = c;
  486. X      bg_color[pairs_used] = c;
  487. X      if (hue_lightness_saturation)
  488. X         putp(tparm(initialize_color, pairs_used,
  489. X           def_colors[c].h, def_colors[c].l, def_colors[c].s));
  490. X      else putp(tparm(initialize_color, pairs_used,
  491. X         def_colors[c].r, def_colors[c].g, def_colors[c].b));
  492. X      return pairs_used++;
  493. X   }
  494. X
  495. X
  496. Xstatic void
  497. Xnew_color(fg, bg, hungry)
  498. Xint fg, bg, hungry;
  499. X   {  /* change the color to fg and bg. */
  500. X      int i;
  501. X
  502. X      if (hungry) eat_cookie();
  503. X      if (set_foreground)
  504. X         {
  505. X            /* make sure black is zero */
  506. X            (void) color_trans(COLOR_BLACK);
  507. X            putp(tparm(set_foreground, color_trans(fg)));
  508. X            putp(tparm(set_background, color_trans(bg)));
  509. X         }
  510. X      else /* set color pair */
  511. X         {
  512. X            for (i = 0; i < pairs_used; i++)
  513. X               if (fg_color[i] == fg && bg_color[i] == bg) {
  514. X                  putp(tparm(set_color_pair, i));
  515. X                  if (hungry) eat_cookie();
  516. X                  return;
  517. X               }
  518. X            if (!can_change)
  519. X               {
  520. X                  /* try to set just the foreground */
  521. X                     for (i = pairs_used - 1; i; i--)
  522. X                        if (fg_color[i] == fg) break;
  523. X                  putp(tparm(set_color_pair, i));
  524. X                  if (hungry) eat_cookie();
  525. X                  return;
  526. X               }
  527. X            if (pairs_used > max_pairs || pairs_used >= MAX_PAIR)
  528. X               {
  529. X                  pairs_used = 0;
  530. X                  ptextln("Ran out of color pairs");
  531. X               }
  532. X            fg_color[pairs_used] = fg;
  533. X            bg_color[pairs_used] = bg;
  534. X            if (hue_lightness_saturation)
  535. X               putp(tparm(initialize_pair, pairs_used,
  536. X                 def_colors[fg].h, def_colors[fg].l, def_colors[fg].s,
  537. X                 def_colors[bg].h, def_colors[bg].l, def_colors[bg].s));
  538. X            else putp(tparm(initialize_pair, pairs_used,
  539. X               def_colors[fg].r, def_colors[fg].g, def_colors[fg].b,
  540. X               def_colors[bg].r, def_colors[bg].g, def_colors[bg].b));
  541. X            putp(tparm(set_color_pair, pairs_used));
  542. X            pairs_used++;
  543. X         }
  544. X      if (hungry) eat_cookie();
  545. X   }
  546. X
  547. X
  548. Xstatic void
  549. Xset_color_step()
  550. X   {  /* set the color_step for the (ccc) display */
  551. X      int i;
  552. X
  553. X         for (i = 2; i < 1000; i++) {
  554. X            if ((i * i * i) >= max_colors) break;
  555. X         }
  556. X      color_step = 1000 / (i - 1);
  557. X   }
  558. X
  559. X
  560. Xstatic void
  561. Xrgb_2_hls(r, g, b, h, l, s)
  562. Xint r, g, b;
  563. Xint *h, *l, *s;
  564. X   {  /* convert RGB to HLS system */
  565. X      int min, max, t;
  566. X
  567. X      if ((min = g < r ? g : r) > b) min = b;
  568. X      if ((max = g > r ? g : r) < b) max = b;
  569. X
  570. X      /* calculate lightness */
  571. X      *l = (min + max) / 20;
  572. X
  573. X      if (min == max)
  574. X         {  /* black, white and all shades of gray */
  575. X            *h = 0;
  576. X            *s = 0;
  577. X            return;
  578. X         }
  579. X
  580. X      /* calculate saturation */
  581. X      if (*l < 50)
  582. X         *s = ((max - min) * 100) / (max + min);
  583. X      else *s = ((max - min) * 100) / (2000 - max - min);
  584. X
  585. X      /* calculate hue */
  586. X      if (r == max)
  587. X         t = 120 + ((g - b) * 60) / (max - min);
  588. X      else
  589. X      if (g == max)
  590. X         t = 240 + ((b - r) * 60) / (max - min);
  591. X      else
  592. X         t = 360 + ((r - g) * 60) / (max - min);
  593. X
  594. X      *h = t % 360;
  595. X}
  596. X
  597. X
  598. Xstatic void
  599. Xsend_color(p, r, g, b)
  600. Xint p, r, g, b;
  601. X   {  /* send the initialize_color (initc) command */
  602. X      int h, l, s;
  603. X
  604. X      if (hue_lightness_saturation)
  605. X         {
  606. X            rgb_2_hls(r, g, b, &h, &l, &s);
  607. X            putp(tparm(initialize_color, p, h, l, s));
  608. X         }
  609. X      else
  610. X         putp(tparm(initialize_color, p, r, g, b));
  611. X   }
  612. X
  613. X
  614. Xstatic void
  615. Xsend_pair(p, fr, fg, fb, br, bg, bb)
  616. Xint p, fr, fg, fb, br, bg, bb;
  617. X   {  /* send the initialize_pair (initp) command */
  618. X      int fh, fl, fs, bh, bl, bs;
  619. X
  620. X      if (hue_lightness_saturation)
  621. X         {
  622. X            rgb_2_hls(fr, fg, fb, &fh, &fl, &fs);
  623. X            rgb_2_hls(br, bg, bb, &bh, &bl, &bs);
  624. X            putp(tparm(initialize_pair, p, fh, fl, fs, bh, bl, bs));
  625. X         }
  626. X      else
  627. X         putp(tparm(initialize_pair, p, fr, fg, fb, bb, bg, bb));
  628. X   }
  629. X
  630. X
  631. Xstatic int
  632. Xload_palette(n)
  633. Xint n;
  634. X   {  /* load the color palette */
  635. X      int rgb;
  636. X
  637. X         for (;;) {
  638. X            if (pairs_used >= n) return FALSE;
  639. X            if (set_foreground)
  640. X               {
  641. X                  if (pairs_used >= max_colors) return FALSE;
  642. X                  send_color(pairs_used, R, G, B);
  643. X                  rgb = R + G + B;
  644. X                  if (rgb > bright_value)
  645. X                     {
  646. X                        bright_value = rgb;  a_bright_color = pairs_used;
  647. X                     }
  648. X               }
  649. X            else
  650. X               {
  651. X                  if (pairs_used >= max_pairs) return FALSE;
  652. X                  if (pairs_used == 0)
  653. X                     send_pair(pairs_used, 1000, 1000, 1000, R, G, B);
  654. X                  else send_pair(pairs_used, R, G, B, R, G, B);
  655. X               }
  656. X            pairs_used++;
  657. X            if ((B += color_step) > 1000)
  658. X               {
  659. X                  B = 0;
  660. X                  if ((G += color_step) > 1000)
  661. X                     {
  662. X                        G = 0;
  663. X                        if ((R += color_step) > 1000) return TRUE;
  664. X                     }
  665. X               }
  666. X         }
  667. X   }
  668. X
  669. X
  670. Xstatic int
  671. Xrainbow(n)
  672. Xint n;
  673. X   {  /* print the programable color display */
  674. X      int i, c, d, palette_full, initial_pair;
  675. X      static struct {
  676. X         char *name;
  677. X         char ch;
  678. X      } splat[] = {
  679. X         "Bg normal", ' ',
  680. X         "Fg normal", ' ',
  681. X         0, 0};
  682. X
  683. X      if (set_foreground ? pairs_used >= max_colors :
  684. X         pairs_used >= max_pairs)
  685. X         {
  686. X            ptextln("New palette");
  687. X            (void) wait_here();
  688. X            initial_pair = pairs_used = 1;
  689. X            bright_value = 0;
  690. X         }
  691. X      else
  692. X      if (line_count + 3 >= lines)
  693. X         {
  694. X            (void) wait_here();
  695. X            put_clear();
  696. X            initial_pair = pairs_used = 1;
  697. X            bright_value = 0;
  698. X            n++;
  699. X         }
  700. X      else
  701. X         {
  702. X            initial_pair = pairs_used;
  703. X            n += initial_pair;
  704. X         }
  705. X      palette_full = load_palette(n);
  706. X         for (d = 0; splat[d].name; d++) {
  707. X            c = splat[d].ch;
  708. X            if (d == 1) put_mode(enter_reverse_mode);
  709. X               for (i = initial_pair; i < n; i++) {
  710. X                  if (i >= pairs_used) break;
  711. X                  if (set_foreground)
  712. X                     {
  713. X                        if (i >= max_colors) break;
  714. X                        putp(tparm(set_foreground, i));
  715. X                        putp(tparm(set_background, i));
  716. X                     }
  717. X                  else
  718. X                     {
  719. X                        if (i >= max_pairs) break;
  720. X                        putp(tparm(set_color_pair, i));
  721. X                     }
  722. X                  putchp(c);
  723. X               }
  724. X            if (d == 1) put_mode(exit_attribute_mode);
  725. X
  726. X            if (set_foreground)
  727. X               {
  728. X                  putp(tparm(set_foreground, a_bright_color));
  729. X                  putp(tparm(set_background, 0));
  730. X               }
  731. X            else putp(tparm(set_color_pair, 0));
  732. X
  733. X            put_str("   ");
  734. X            put_str(splat[d].name);
  735. X            put_crlf();
  736. X         }
  737. X      return palette_full;
  738. X   }
  739. X
  740. X
  741. Xstatic void
  742. Xncv_display(m)
  743. Xint m;
  744. X   {  /* print the no_color_video (ncv) test line */
  745. X      putchp('0' + m);
  746. X      putchp(' ');
  747. X      eat_cookie();
  748. X      set_attr(1 << m);
  749. X      sprintf(temp, "%-11s", alt_modes[m].name);
  750. X      put_str(temp);
  751. X
  752. X      new_color(COLOR_BLUE, COLOR_BLACK, TRUE);
  753. X      put_str("blue");
  754. X
  755. X      new_color(COLOR_BLACK, COLOR_GREEN, TRUE);
  756. X      put_str("green");
  757. X
  758. X      new_color(COLOR_WHITE, COLOR_BLACK, TRUE);
  759. X      put_str(alt_modes[m].name);
  760. X      eat_cookie();
  761. X      set_attr(0);
  762. X      put_crlf();
  763. X   }
  764. X
  765. X
  766. Xstatic void
  767. Xdump_colors()
  768. X   {  /* display the colors in some estetic pattern */
  769. X      static int xmap[8] = {0, 3, 4, 7, 1, 2, 5, 6};
  770. X      int i, j, k, xi, xj, width, p, cs;
  771. X      int found_one;
  772. X
  773. X      cs = color_step <= 125 ? 125 : color_step;
  774. X      width = (1000 / cs) + 1;
  775. X         for (xi = 0; xi < 16; xi++) {
  776. X            i = (xi & 8) ? xi ^ 15 : xi;
  777. X            R = i * cs;
  778. X            if (R <= 1000)
  779. X               {
  780. X                  found_one = FALSE;
  781. X                 for (xj = 0; xj < 32; xj++) {
  782. X                        j = ((xj & 8) ? xj ^ 15 : xj) & 7;
  783. X                    k = xmap[((xi >> 1) & 4) + (xj >> 3)];
  784. X                        G = j * cs;
  785. X                        B = k * cs;
  786. X                        if (G <= 1000 && B <= 1000)
  787. X                           {
  788. X                              p = (k * width + j) * width + i;
  789. X                              if (set_background)
  790. X                                 {
  791. X                                    if (p >= max_colors) continue;
  792. X                                    send_color(p, R, G, B);
  793. X                                    putp(tparm(set_background, p));
  794. X                                 }
  795. X                              else
  796. X                                 {
  797. X                                    if (p >= max_pairs) continue;
  798. X                                    send_pair(p, R, G, B, R, G, B);
  799. X                                    putp(tparm(set_color_pair, p));
  800. X                                 }
  801. X                              found_one = TRUE;
  802. X                              putchp(' ');
  803. X                              putchp(' ');
  804. X                           }
  805. X                      }
  806. X                   if (found_one) put_crlf();
  807. X               }
  808. X         }
  809. X   }
  810. X#endif
  811. X
  812. X
  813. Xvoid
  814. Xtest_color()
  815. X   {  /* test color attributes */
  816. X#ifdef SVR3_2
  817. X      int i, j;
  818. X
  819. X      if (stop_testing)
  820. X         {
  821. X            can_test("(colors)(pairs)(setb)(setf)(scp)(ncv)(bce)(ccc)");
  822. X            can_test("(initc)(hls)(initp)(op)(oc)");
  823. X            return;
  824. X         }
  825. X
  826. X      new_test(2);
  827. X      if (max_colors <= 0 && max_pairs <= 0)
  828. X         {
  829. X            ptextln("This is not a color terminal.  (colors) and (pairs) are missing.");
  830. X            (void) wait_here();
  831. X            return;
  832. X         }
  833. X      sprintf(temp, "This terminal can display %d colors and %d color pairs.  (colors) (pairs)",
  834. X         max_colors, max_pairs);
  835. X      ptextln(temp);
  836. X      if (set_foreground == NULL & set_color_pair == NULL)
  837. X         {
  838. X            ptextln("Both set foreground (setf) and set color pair (scp) are not present.");
  839. X            if (!set_background)
  840. X               ptextln("(setb) set background not present");
  841. X            ptextln("Color testing terminated...");
  842. X            return;
  843. X         }
  844. X
  845. X      maybe_wait(21);
  846. X      /* initialize the color palette */
  847. X      pairs_used = max_colors >= 8 ? 8 : max_colors;
  848. X      if (can_change) putp(orig_colors);
  849. X      putp(tparm(orig_pair));
  850. X      new_color(COLOR_WHITE, COLOR_BLACK, FALSE);
  851. X
  852. X      ptextln("\n(setf) (setb) (scp) The following colors are predefined:");
  853. X      ptextln("\n   Foreground     Background");
  854. X      put_crlf();
  855. X      j = max_colors > 8 ? 8 : max_colors;
  856. X      /* the black on white test is the same as the white on black test. */
  857. X         for (i = 1; i < j; i++) {
  858. X            putchp('0' + i);
  859. X            putchp(' ');
  860. X            sprintf(temp, " %s ", def_colors[i].name);
  861. X
  862. X            new_color(i, COLOR_BLACK, TRUE);
  863. X            put_str(temp);
  864. X
  865. X            new_color(COLOR_BLACK, COLOR_BLACK, TRUE);
  866. X            put_str("  ");
  867. X
  868. X            new_color(COLOR_BLACK, i, TRUE);
  869. X            put_str(temp);
  870. X
  871. X            new_color(COLOR_WHITE, COLOR_BLACK, FALSE);
  872. X            put_crlf();
  873. X         }
  874. X
  875. X      (void) wait_here();
  876. X
  877. X      putln("   0  1  2  3  4  5  6  7");
  878. X         for (i = 0; i < 8; i++) {
  879. X            j = pairs_used + 8;
  880. X            if ((j > max_pairs || j >= MAX_PAIR) && can_change)
  881. X               {
  882. X                  pairs_used = 0;
  883. X                  new_color(COLOR_WHITE, COLOR_BLACK, FALSE);
  884. X                  ptext("Ran out of color pairs");
  885. X                  (void) wait_here();
  886. X                  put_crlf();
  887. X               }
  888. X            putchp('0' + i);
  889. X               for (j = 0; j < 8; j++) {
  890. X                  new_color(j, i, TRUE);
  891. X                  putchp('0' + i);
  892. X               }
  893. X            new_color(COLOR_WHITE, COLOR_BLACK, FALSE);
  894. X            put_crlf();
  895. X         }
  896. X      (void) wait_here();
  897. X      new_test(16);
  898. X      ptextln("\nAccording to no_color_video (ncv), the following attributes should work correctly with color.\n");
  899. X      set_attr(0);
  900. X      ncv_display(0);
  901. X         for (i = 1; i <= 9; i++)
  902. X            if (((no_color_video >> (mode_map[i] - 1)) & 1) == 0)
  903. X               ncv_display(mode_map[i]);
  904. X      if (no_color_video & 0x3ff)
  905. X         {
  906. X            ptextln("\nThe following attributes should not work correctly with color. (ncv)\n");
  907. X               for (i = 1; i <= 9; i++)
  908. X                  if ((no_color_video >> (mode_map[i] - 1)) & 1)
  909. X                     ncv_display(mode_map[i]);
  910. X         }
  911. X      i = wait_here();
  912. X      if (i > ' ' & i <= 'z')
  913. X         {
  914. X            ptext("The following decimal values may be used to add or delete attributes to/from (ncv):");
  915. X               for (i = 1; i <= 9; i++) {
  916. X                  sprintf(temp, "  %d/%d", i, 1 << (i - 1));
  917. X                  ptext(temp);
  918. X               }
  919. X            put_crlf();
  920. X            (void) wait_here();
  921. X         }
  922. X      new_color(COLOR_WHITE, COLOR_WHITE, FALSE);
  923. X      put_clear();
  924. X      put_newlines(2);
  925. X      new_color(COLOR_WHITE, COLOR_BLACK, FALSE);
  926. X      ptextln("If the two lines above are black then back_color_erase (bce) should be false.");
  927. X      sprintf(temp, "(bce) is %s in the data base.", back_color_erase ? "true" : "false");
  928. X      ptextln(temp);
  929. X      (void) wait_here();
  930. X      put_clear();
  931. X
  932. X      /* color palette test */
  933. X      if (can_change)
  934. X         {
  935. X            putp(orig_colors);
  936. X            pairs_used = 0;
  937. X            new_color(COLOR_WHITE, COLOR_BLACK, FALSE);
  938. X            sprintf(temp, "Reloading colors (init%c) using %s method",
  939. X               set_foreground ? 'c' : 'p',
  940. X               hue_lightness_saturation ? "HLS" : "RGB");
  941. X            ptextln(temp);
  942. X            put_crlf();
  943. X            j = max_colors > 7 ? 7 : max_colors;
  944. X            /* redisplay the above test with reinitialized colors */
  945. X            /* If these colors don't look right to you... */
  946. X               for (i = 0; i < j; i++) {
  947. X                  sprintf(temp, " %s ", def_colors[i ^ 7].name);
  948. X
  949. X                  new_color(i ^ 7, COLOR_BLACK, TRUE);
  950. X                  put_str(temp);
  951. X
  952. X                  new_color(COLOR_BLACK, COLOR_BLACK, TRUE);
  953. X                  put_str("  ");
  954. X
  955. X                  new_color(COLOR_BLACK, i ^ 7, TRUE);
  956. X                  put_str(temp);
  957. X
  958. X                  new_color(COLOR_WHITE, COLOR_BLACK, FALSE);
  959. X                  put_crlf();
  960. X               }
  961. X            (void) wait_here();
  962. X
  963. X            pairs_used = 0;
  964. X            cookie_monster = 0;
  965. X            if (magic_cookie_glitch > 0)
  966. X               {
  967. X                  cookie_monster =
  968. X                     (set_foreground ? magic_cookie_glitch : 0) +
  969. X                     (set_background ? magic_cookie_glitch : 0) +
  970. X                     (set_color_pair ? magic_cookie_glitch : 0);
  971. X               }
  972. X            set_color_step();
  973. X            colors_per_line = max_colors > max_pairs
  974. X               ? max_pairs : max_colors;
  975. X            j = (columns - 14) / (cookie_monster + 1);
  976. X            if (colors_per_line > j)
  977. X               {
  978. X                  colors_per_line = (j / i) * i;
  979. X               }
  980. X
  981. X            sprintf(temp, "RGB color step %d, cookies %d", color_step,
  982. X               cookie_monster);
  983. X            ptextln(temp);
  984. X
  985. X            R = G = B = 0;
  986. X            pairs_used = 0;
  987. X               for (;;) {
  988. X                  if (rainbow(colors_per_line)) break;
  989. X               }
  990. X            (void) wait_here();
  991. X            dump_colors();
  992. X            (void) wait_here();
  993. X            putp(orig_colors);
  994. X         }
  995. X      else ptextln("Terminal can not change colors (ccc)");
  996. X      putp(tparm(orig_pair));
  997. X      ptextln("End color tests");
  998. X      (void) wait_here();
  999. X#endif
  1000. X   }
  1001. END_OF_FILE
  1002. if test 18610 -ne `wc -c <'color.c'`; then
  1003.     echo shar: \"'color.c'\" unpacked with wrong size!
  1004. fi
  1005. # end of 'color.c'
  1006. fi
  1007. if test -f 'makefile' -a "${1}" != "-c" ; then 
  1008.   echo shar: Will not clobber existing file \"'makefile'\"
  1009. else
  1010. echo shar: Extracting \"'makefile'\" \(3005 characters\)
  1011. sed "s/^X//" >'makefile' <<'END_OF_FILE'
  1012. X# makefile for terminfo/termcap test program
  1013. X#
  1014. X# The following pre-processor variables may be set.
  1015. X# 
  1016. X# TESTCAP    Used to test termcaps insted of terminfo's.
  1017. X#        Generally, when this code is compiled on System V Unix
  1018. X#        the TESTCAP variable should not be set.  BSD systems
  1019. X#        should usually set TESTCAP.  BSD systems that have
  1020. X#        System V support libraries may omit the TESTCAP
  1021. X#        variable in order to test terminfo.
  1022. X#
  1023. X# XENIX        If used with TESTCAP this option will test alternate
  1024. X#        character sets as defined by SCO XENIX.
  1025. X#
  1026. X# MV        If used with TESTCAP this option will test alternate
  1027. X#        character sets as defined by Multi-View and Portfolio.
  1028. X#
  1029. X# TC        If used with TESTCAP this option will test alternate
  1030. X#        character sets as defined by the Terminal Control
  1031. X#        package created by MainStream Systems, Winfield Kansas.
  1032. X#
  1033. X# LIBTC        When used with the TC option, LIBTC forces calls to the
  1034. X#        TC library instead of libtermcap.a.
  1035. X#
  1036. X# SVR3        System V Releaes 3.1.  Has alternate character set
  1037. X#        support.
  1038. X#
  1039. X# SVR3_2    System V Release 3.2.  Has color and 8 bit support.
  1040. X#
  1041. X# SELECT    Use this define if your operating system has the select
  1042. X#        system call.
  1043. X#
  1044. X# WAIT_MODE    Use this define if your operating system cannot tell if
  1045. X#        a chracter is ready in the input queue.  Funtion keys
  1046. X#        must be padded with blanks.
  1047. X#
  1048. X#     If generated without pre-processor variables, a terminfo test
  1049. X#    program will be generated for System V Release 3.
  1050. X
  1051. XBINDIR=/usr/local/bin
  1052. X
  1053. X# PATH for .c and .h files
  1054. XDIR=.
  1055. X
  1056. X#                use for terminfo testing
  1057. X#CFLAGS=-O -DSVR3_2 -DSELECT
  1058. X#                use for termcap testing
  1059. X#CFLAGS=-O -DTESTCAP -DSELECT
  1060. X#                use for xenix termcap testing
  1061. X#CFLAGS=-O -DTESTCAP -DXENIX
  1062. X#
  1063. XCFLAGS=-O -DTESTCAP -DSELECT
  1064. X
  1065. X#                use this line for native mode
  1066. XLDFLAGS=-lcurses -ltermcap
  1067. X# Xenix compatable curses package is called xcurses in ATT Unix SVR3
  1068. X#                use this line for xenix compatibility
  1069. X#LDFLAGS=-lxcurses -lxtermcap
  1070. X
  1071. XCMD=ted
  1072. X
  1073. XOFILES=charset.o color.o control.o crum.o fun.o getcaps.o modes.o\
  1074. X    output.o pad.o scan.o sysdep.o ted.o tparam.o
  1075. X
  1076. XCFILES=$(DIR)/charset.c $(DIR)/color.c $(DIR)/control.c $(DIR)/crum.c\
  1077. X    $(DIR)/fun.c $(DIR)/getcaps.c $(DIR)/modes.c $(DIR)/output.c\
  1078. X    $(DIR)/pad.c $(DIR)/scan.c $(DIR)/sysdep.c $(DIR)/ted.c\
  1079. X    $(DIR)/tparam.c
  1080. X
  1081. X#CFILES=$(OFILES:.o=.c) 
  1082. X
  1083. X$(CMD) : $P $(OFILES)
  1084. X    $(CC) -g -o $(CMD) $(OFILES) $(LDFLAGS)
  1085. X
  1086. X# The "build" program is designed to write the bsd.h and getcaps.c
  1087. X# files.  This program will only link under System V, but the output
  1088. X# may be run on any system.
  1089. Xbuild : $(DIR)/build.c
  1090. X    $(CC) -g build.c -o build -lcurses -ltermcap
  1091. X
  1092. X$(OFILES) : $(DIR)/ted.h
  1093. X
  1094. Xlint :
  1095. X    lint -DTESTCAP $(CFILES)
  1096. X
  1097. Xclean :
  1098. X    rm -f $(OFILES)
  1099. X
  1100. Xtags : $(CFILES) $(DIR)/ted.h
  1101. X    ctags $(>)
  1102. X
  1103. Xinstall: $(CMD)
  1104. X    cp $(CMD) $(BINDIR)
  1105. X
  1106. Xlist : $(DIR)/ted.h $(CFILES)
  1107. X    for name in $(>) ; \
  1108. X    do \
  1109. X        ucb cat -n $$name | ucb pr -h "$$name" | ucb lpr ; \
  1110. X    done
  1111. X
  1112. X#    archive a backup copy
  1113. Xarch : $(DIR)/makefile $(DIR)/ted.h $(CFILES)
  1114. X    rm -f ted.a
  1115. X    ar q ted.a $(>)
  1116. X
  1117. Xcapcomp: $(DIR)/capcomp.c
  1118. X    cc $(CFLAGS) $(?) $(LDFLAGS) -o capcomp
  1119. END_OF_FILE
  1120. if test 3005 -ne `wc -c <'makefile'`; then
  1121.     echo shar: \"'makefile'\" unpacked with wrong size!
  1122. fi
  1123. # end of 'makefile'
  1124. fi
  1125. echo shar: End of archive 7 \(of 7\).
  1126. cp /dev/null ark7isdone
  1127. MISSING=""
  1128. for I in 1 2 3 4 5 6 7 ; do
  1129.     if test ! -f ark${I}isdone ; then
  1130.     MISSING="${MISSING} ${I}"
  1131.     fi
  1132. done
  1133. if test "${MISSING}" = "" ; then
  1134.     echo You have unpacked all 7 archives.
  1135.     rm -f ark[1-9]isdone
  1136. else
  1137.     echo You still need to unpack the following archives:
  1138.     echo "        " ${MISSING}
  1139. fi
  1140. ##  End of shell archive.
  1141. exit 0
  1142.  
  1143. exit 0 # Just in case...
  1144. -- 
  1145. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1146. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1147. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1148. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1149.